#include "LoginWindow.h"
#include "ui_loginui.h"

#include "windows.h"

using namespace std;

QSqlDatabase MMyAsocDb = QSqlDatabase::addDatabase("QPSQL");
FILE *leerArch;
QString host;

LoginWindow::LoginWindow(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::LoginUI)
{
    ui->setupUi(this);

    /*
    Se elimina el borde de la ventana. Para quitar los otros botones,
    mirar las opciones de http://doc.qt.digia.com/4.6/widgets-windowflags.html
    */
    setWindowFlags(Qt::FramelessWindowHint);

    ui->entrar_btn->setEnabled(false);
    MMyAsocDb.setDatabaseName("MMyAsocDb");
    MMyAsocDb.setPort(5432);
    MMyAsocDb.setHostName("localhost");

    // Se le da acción al botón cancelar.
    connect(ui->cancelar_btn,SIGNAL(clicked()),this,SLOT(close()));

    // Cuando se ingresa el nombre de usuario (!= null), se habilita el botón Entrar.
    connect(ui->usuario,SIGNAL(textChanged(const QString&)),this,SLOT(enable_entrar_btn(const QString&)));

    connect(ui->contrasenia,SIGNAL(textChanged(const QString&)),this,SLOT(enable_entrar_btn(const QString&)));

    ui->usuario->setFocus();
}

LoginWindow::~LoginWindow()
{
    delete ui;
    MMyAsocDb.close();
}

void LoginWindow::enable_entrar_btn(const QString &text)
{
    ui->entrar_btn->setEnabled(!text.isEmpty());
}

void LoginWindow::on_entrar_btn_clicked()
{
    username = ui->usuario->text();
    MMyAsocDb.setUserName(username);
    MMyAsocDb.setPassword(ui->contrasenia->text());

    SchemaDB *sch = NULL;

    if (! MMyAsocDb.open()) {
        ShowCriticalError(MMyAsocDb.lastError().text());
        return;
    }

    if (! sch->CreateSchemaDB())
        return;

    close(); // Se cierra la ventana de login.
    MainWindow* main_win = new MainWindow(0,username,"localhost",5432);
    main_win->show(); // Se lanza la ventana principal.
}

/**
* Muestra el mensaje de error en caso de producirse uno de ellos. Toma como parametro
* un texto que es el detalle de la información del mensaje.
*/
void LoginWindow::ShowCriticalError(const QString &text)
{
    QMessageBox msg;
    msg.setStyleSheet("background-color: rgb(0, 139, 56);color: rgb(255, 255, 255);font: 12pt \"Helvetica57-Condensed\";border-style: solid");
    msg.setIcon(QMessageBox::Critical);
    msg.setText("Se ha producido un error. Por favor, intente nuevamente.");
    msg.setDetailedText(text);
    msg.addButton("Cerrar",QMessageBox::AcceptRole);
    msg.setWindowTitle("Alerta!");
    msg.exec();
}

void LoginWindow::on_siti_btn_clicked()
{
    QDesktopServices::openUrl(QUrl("http://www.siti-soft.com.ar/"));
}
